541. 反转字符串 II
541. 反转字符串 II
分析
这个题直接用模拟即可,直接用 while 循环,i 为每次循环处理的子串的起点,初始值为 0,每次循环,我们都能确定这一轮的起点,当我们确定了起点 i 之后,需要反转的字符串的索引的终点的位置,其实是 i+k-1
和 chars.length-1
中小的那一个,然后确定 i+k+k-1
和 chars.length-1
中那个小,然后以这个值 +1,作为 i 的下一个值,再次循环。
有一个特别需要注意的地方,当字符串的起点为 i 的时候,反转从 i 开始的前 k 个字符串的范围是 [i,i+k-1]
,而不是 [i,i+k]
,这个需要特别注意。
解题
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
int i=0;
while(i<chars.length){
int half = i+k-1;
// 需要反转的部门
int roundEnd = half<=chars.length-1?half:chars.length-1;
int end = i+k+k-1;
// 下一次处理的起点
int next = end<=chars.length-1?end:chars.length-1;
int roundStart = i;
for(;roundStart<roundEnd;){
char temp = chars[roundStart];
chars[roundStart]=chars[roundEnd];
chars[roundEnd]=temp;
roundStart++;
roundEnd--;
}
i=next+1;
}
return new String(chars);
}